<template>
    <div class="demo-collapse">
        <el-collapse v-model="activeNames" @change="handleChange">
            <el-collapse-item title="解题思路" name="thinking">
                <div>
                    <div>
                        1.将各个活动按照活动结束时间fi排序，且f1&lt;=f2&lt;=f3…
                    </div>
                    <div>
                        2.选择活动1,要求该活动的结束时间最早
                    </div>
                    <div>
                        3.从2开始按顺序比较各个活动，选择第一个与活动1相容的活动i
                    </div>
                    <div>
                        4.从i+1开始按顺序考察各个活动，选择第一个与活动 i 相容的活动 j 
                    </div>
                    <div>
                        **每次选择与现有活动相容的结束时间最早的活动 **
                    </div>
                </div>
            </el-collapse-item>
            <el-collapse-item title="代码实现" name="code">
                <!-- <el-image style="width:100%" :src="url" :fit="fit" loading="lazy"></el-image> -->
                <div v-highlight>
                    <div>C/C++:</div>
                    <pre class="language-javascript">
                      <code>
                        #include &lt;stdio.h>
                            #define N 100
                            
                            void greedyselector(int n, int s[], int f[], int selected[]);
                            
                            int main()
                            {
                                int s[N], f[N]; //s[i],f[i]存储活动 i的开始和结束时间
                                int selected[N]; //若活动 i被选择，则selected[i]置1，否则置0
                                int n;
                                
                                printf("请输入活动个数：");
                                scanf("%d", &n);
                                
                                printf("请输入各个活动的开始和结束时间（要求按结束时间升序输入）：\n");
                                for (int i = 1; i &lt;= n; i ++)
                                    scanf("%d%d", &s[i], &f[i]);
                                    
                                greedyselector(n, s, f, selected);
                                printf("如下活动被选择：\n");
                                for (int i = 1; i &lt;= n; i ++)
                                    if (selected[i] == 1)
                                        printf("%d ", i);
                                        
                                printf("\n");
                                return 0;
                            } 
                            
                            void greedyselector(int n, int s[], int f[], int selected[])
                            {
                                int j = 1; //j记录最近一次加入到a中的活动 
                                
                                selected[1] = 1; //首先选择活动1 
                                for (int i = 2; i &lt;= n; i ++)
                                    if (s[i] >= f[j]) { //如果活动i与活动j兼容，则选择活动i 
                                        selected[i] = 1;
                                        j = i;
                                    }
                                    else
                                        selected[i] = 0;
                            }
                            
                      </code>
                    </pre>
                </div>
                <div v-highlight>
                    <div>Python:</div>
                    <pre class="language-javascript">
                        <code>
                            def bubble_sort(s,f):
                                for i in range(len(f)):
                                    for j in range(0,len(f)-i-1):
                                        if f[j] > f[j+1]:
                                            f[j], f[j+1] = f[j+1],f[j]
                                            s[j],s[j+1] = s[j+1],s[j]
                                return s,f

                            def greedy(s,f,n):
                                a = [True for x in range(n)]
                                #初始选择第一个活动
                                j = 0
                                for i in range(1,n):
                                    #如果下一个活动的开始时间大于等于上个活动的结束时间
                                    if s[i] >= f[j]:
                                        a[i] = True
                                        j = i
                                    else:
                                        a[i] = False
                                return a

                            n = int(input("输入活动数量和起始事件（数量和活动用回车分隔，活动之间用空格分隔）"))
                            arr = input().split()
                            #5（回车）(1,5) (2,6) (2,8) (3,9) (5,10)
                            s = []
                            f = []
                            for ar in arr:
                                ar = ar[1:-1]
                                start = int(ar.split(',')[0])
                                end = int(ar.split(',')[1])
                                s.append(start)
                                f.append(end)

                            s,f = bubble_sort(s,f)
                            A = greedy(s,f,n)

                            res = []
                            for k in range(len(A)):
                                if A[k]:
                                    res.append('({},{})'.format(s[k],f[k]))
                            print(' '.join(res))

                        </code>
                    </pre>
                </div>
                <div v-highlight>
                    <div>Java:</div>
                    <pre class="language-javascript">
                      <code>
                        import java.io.BufferedReader;
                        import java.io.IOException;
                        import java.io.InputStreamReader;
                        import java.io.StreamTokenizer;
                        import java.util.Arrays;
                        import java.util.Comparator;
 
 
                        public class Main {
                            static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
     
                            public static void main(String[] args) {
                                int n = nextInt();
                                int m = nextInt();
                                int[][] A = new int[n][2];  // A[i][0]代表活动i的开始时间，A[i][1]代表结束时间
        
                                for (int i = 0; i &lt; n; i++) {
                                    A[i][0] = nextInt();
                                    A[i][1] = nextInt();
                                }
                                // 重写比较器，按照结束时间升序
                                Arrays.sort(A, new Comparator&lt;int []>() {
                                    public int compare(int[] a, int[] b) {
                                        return a[1] - b[1];
                                    }
                                });
       
                                int cnt = 1;  // 活动数
                                int j = 0;  // 当前活动的 下标
                                // 当下一个活动
                                for (int i = 1; i &lt; n; i++) {
                                    if (A[i][0] >= A[j][1]) {
                                        cnt++;
                                        j = i;
                                    }
                                }
                                System.out.println(cnt);
         
                            }
     
                            static int nextInt() {
                                try {
                                    in.nextToken();
                                } catch (IOException e) {
                                    e.printStackTrace();
                                }
                                return (int)in.nval;
                            }
                        }

                      </code>
                    </pre>
                </div>
            </el-collapse-item>
        </el-collapse>
    </div>
</template>

<script lang="ts" setup>
import { ref } from 'vue'
const activeNames = ref(['thinking'])
const handleChange = (val: string[]) => {
    console.log(val)
}
// 代码实现部分
import "vue-code-highlight/themes/prism-solarizedlight.css";
import "vue-code-highlight/themes/window.css";

</script>
